#include "utils.h"
#include "logger.h"
#include "thread_pool.h"
#include "network.h"
#include "db/db.h"
#include "handler/handler.h"

#define CONFIG_FILE_PATH "./config/server_config.json"

int main(int argc, char *argv[])
{
    ServerConfig_t config; // 加载服务器配置文件
    loadServerConfig(CONFIG_FILE_PATH, &config);
    initLog(config.log_path); // 初始化日志系统

    ServerCluster_t *cluster = initServerCluster(&config);                    // 初始化服务器集群，建立监听
    ClientList_t *client_list = initClientList(2 * (config.max_connections)); // 初始化客户端列表结构体

    MYSQL *conn = initDB(&config); // 初始化数据库连接

    ThreadPool_t *pool = createThreadPool(config.thread_pool_size); // 创建线程池

    // 服务端开始处理新的连接
    handleEpollEvent(cluster, &cluster->server, client_list, conn, pool);

    closeDB(conn);               // 关闭数据库
    freeClientList(client_list); // 释放客户端列表结构体
    freeServerCluster(cluster);  // 释放服务器列表结构体
    destroyThreadPool(pool);     // 销毁线程池
    closeLog();                  // 关闭日志对象

    PRINT_INFO("Server shutdown successfully. Bye!");

    return 0;
}
